
"""
作用 ：为所有接口模块提供一些公共功能，方便接口调用。
具体包括 ：
    1. 返回一个完整的url 。
    2. 重新封装get ,post方法
    3. 处理请求头
    4. 登录
"""

from setting import BASE_URL,LOGIN_INFO
import requests
from loguru import logger
from utils.object_utils import cache


class Base(object):

    def get_url(self,path,params=None):
        """
        返回一个完整的url 。类似于 ：http://ip:port/api?params
        :param path : 接口路径
        :param params : 查询参数
        :return:
        """
        if params:
            full_url = BASE_URL + path + '?' + params
            return full_url
        return BASE_URL + path

    def get(self,url):
        """
        重新封装get方法
        :return:
        """
        result = None
        response = requests.get(url,headers=self._get_headers())
        try:
            result = response.json()
            logger.info("请求URL:{},返回结果:{}".format(url,result))
            return result
        except Exception as e:
            logger.error("请求get方法异常，返回数据:{}".format(result))

    def post(self,url,data):
        """
        重新封装post方法
        :return:
        """
        result = None
        response = requests.post(url,json=data,headers=self._get_headers())
        try:
            result = response.json()
            logger.info("请求URL:{},请求体数据:{},返回结果:{}".format(url,data,result))
            return result
        except Exception as e:
            logger.error("请求post方法异常，返回数据:{}".format(result))

    def _get_headers(self):
        """
        处理请求头返回字典格式，包括健名：Content-Type,X-Litemall-Admin-Token
        :return:
        """
        headers = {"Content-Type":"application/json"}
        token = cache.get('token')          # 从缓存中获取token值
        if token:
            headers.update({'X-Litemall-Admin-Token':token})
            return headers
        return headers

    def login(self):
        """
        登录功能
        :return:
        """
        # 1. 请求登录
        login_path = '/admin/auth/login'
        login_url = self.get_url(login_path)    # 返回的是登录的全路径
        result = self.post(login_url,LOGIN_INFO)
        # 2. 进行判断
        if 0 == result.get('errno'):
            logger.success("请求登录接口成功")
            token = result.get('data').get('token')
            cache.set('token',token)        # 存放在缓存中了 。
        else:
            logger.error("登录失败:{}".format(result))
        return result



if __name__ == '__main__':
    base = Base()
    print(base.get_url('/admin/auth/login'))
    print(base.get_url('/admin/admin/list','page=1&limit=20&sort=add_time&order=desc'))
    print(base.login())